
from flask import Flask, json,request,jsonify
import json

# 实例化Flask
app=Flask(__name__)

# 加载配置文件
from config import Config
app.config.from_object(Config)

# 跨域配置
from flask_cors import CORS
CORS(app)

# 实现orm,对象关系映射
from flask_sqlalchemy import SQLAlchemy
db =SQLAlchemy(app)

# 创建分类表
class Cate(db.Model):
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    name=db.Column(db.String(40),unique=True) #名称
    level = db.Column(db.Integer,default=1) # 等级
    pid = db.Column(db.Integer,default=0) # 父id
# db.create_all()

# 创建课程表
class Course(db.Model):
     __tablename__='course'
     id = db.Column(db.Integer,primary_key=True,autoincrement=True)
     name = db.Column(db.String(50),unique=True)#名称唯一
     description = db.Column(db.Text,default='')#描述
     tname = db.Column(db.String(50),default='')#讲师
     pic = db.Column(db.String(255),default='')#图片
     vedios = db.Column(db.String(255),default='')#视频['','']
     status = db.Column(db.Integer,default=1)#审核状态
     reason=db.Column(db.String(255),default='')#失败原因
     cid =  db.Column(db.Integer,db.ForeignKey('cate.id'))#所属分类
db.create_all()

# 分类接口 （增删改查）
@app.route('/cateM',methods=['POST','GET','PUT','DELETE'])
def cateM():
    if request.method == "POST":
        #获取参数
        data = request.data
        #对参数进行验证，如果有json.loads()
        if data:
            data = json.loads(data)
        #如果没有去form中获取
        else:
            data = request.form
        #添加
        #判断是添加还是修改
        try:
             id = data['id']
        except:
            id=0
        if id:
            #修改
             cate = Cate.query.filter_by(id=id).update({"name":data['name']})
        else:
            cate = Cate(name=data['name'])
            db.session.add(cate)
        #提交
        db.session.commit()
        #返回结果
        return jsonify({"code":200})

    elif request.method == 'GET':
        # 先判断前端是否传递了当前页信息 有的话获取分页信息 没有则获取全部
        if request.args.get('page'):
            # 1、分页 获取前端路由拼接传递的当前页信息
            page=int(request.args.get('page'))
            # 每页显示3条
            page_size=3
            # 计算开始位置公式 当前页-1 乘 每页显示多少条
            start=(page-1)*page_size
            #      表名 获取  开始位置      几条
            cates=Cate.query.offset(start).limit(page_size)
        else:
            cates=Cate.query.all()
        #  2、重构数据 封装成json 先定义一个列表 
        list=[]
        # 判断数据是否存在
        if cates:
            # 循环遍历
            for i in cates:
                # 定义一个字典 用键值对的形式提取信息
                dict={'id':i.id,'name':i.name}
                # 把字典加到列表中 把数据重构为json格式 也就是列表套字典
                list.append(dict)
      
        # 获取一共有多少条
        total = Cate.query.count()
          # 3、返回json
        return jsonify({'code':200,'list':list,'total':total})

    # elif  request.method=='PUT':
    #     id = request.args.get('id')
    #     name =request.args.get('name')
    #     Cate.query.filter_by(id=id).update({'name':name})
    #     db.session.commit()
    #     # 返回
    #     return ({'code':200})
 
    elif request.method=='DELETE':
        id=request.args.get('id')
        Cate.query.filter_by(id=id).delete()
        db.session.commit()
        # 返回
        return jsonify({'code':200})


# 根据分类id获取分类
@app.route('/getcateByid')
def getcateByid():
    #获取id
    id = request.args.get('id')
    #获取id查询分类信息
    cate=Cate.query.filter_by(id=id).first()
    #数据重组dict
    dict={'id':cate.id,'name':cate.name}
    #返回jsonify
    return jsonify({"code":200,'cate':dict})

# 图片上传接口
import os
@app.route('/upload',methods=['POST'])
def upload():
    # 先获取前端上传的文件
    file=request.files['file']
    # 保存        路径                         文件名
    file.save(os.path.join('./static/upload/',file.filename))
    # 返回
    return jsonify({'code':200,'pic':file.filename})



# 所有函数入口
if __name__ == '__main__':
    app.run(debug=True)
    



# # 导入flask
# from flask import Flask,request,jsonify
# import json




# # 实例化Flask
# app=Flask(__name__)

# # 加载配置文件
# from config import Config
# app.config.from_object(Config)

# # 配置跨域
# from flask_cors import CORS
# CORS(app)


# # 实现orm对象关系映射
# from flask_sqlalchemy import SQLAlchemy
# db=SQLAlchemy(app)

# # 创建分类表
# class Cate2(db.Model):
#     id=db.Column(db.Integer,primary_key=True,autoincrement=True)
#     name=db.Column(db.String(50),unique=True) #名称
#     level=db.Column(db.Integer,default=1) #等级
#     pid=db.Column(db.Integer,default=0) #父id

# db.create_all()

# # 配路由
# @app.route('/cateM',methods=['POST','GET','PUT','DELETE'])
# def cateM():
#     if request.method=='POST':
#         # 获取数据
#         data=request.data
#         # 如果有数据
#         if data:
#             data=json.loads(data)
#         # 如果没有去from中获取
#         else:
#             data=request.form
#         # 添加
#         cate=Cate2(name=data['name'])
#         db.session.add(cate)

#         #提交
#         db.session.commit()
#         # 返回结果
#         return jsonify({'code':200})

#     if request.method=='GET':
#         #获取所有数据
#         cate=Cate2.query.all()
#         # 重构数据
#         list=[]
#         # 循环
#         for i in cate:
#             #定义字典
#             dict={'id':i.id,'name':i.name}
#             list.append(dict)

#         # 返回json
#         return jsonify({'code':200,'list':list})

#     if request.method=='PUT':
#         # 获取id 和 name
#         id=request.args['id']
#         name=request.args['name']
#         # 通过Id拿数据 然后修改name字段
#         cate=Cate2.query.filter_by(id=id).update({'name':name})
        
#         # 提交
#         db.session.commit()
#         # 返回
#         return jsonify({'code':200})

#     if request.method=='DELETE':
#         # 获取id
#         id=request.args['id']
#         # 通过id拿数据 然后删除
#         cate=Cate2.query.filter_by(id=id).delete()
#         # 提交
#         db.session.commit()
#         # 返回json
#         return jsonify({'code':200})


# # 写函数入口
# if __name__ == '__main__':
#     app.run(debug=True)
